package ar.edu.utn.frba.disenio.fechas.tests;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import ar.edu.utn.frba.disenio.fechas.*;

public class FechasTests {
	
	Flexible losTresFormatos = new Flexible("");
	Formato latinoamericano = new Formato("dd/MM/yyyy");
	Formato norteamericano = new Formato("MM/dd/yyyy");
	Formato estandar = new Formato("yyyy-MM-dd");
	
	@Before
	public void setUp(){
		losTresFormatos.agregarFormato(latinoamericano);
		losTresFormatos.agregarFormato(norteamericano);
		losTresFormatos.agregarFormato(estandar);
	}
	
	@Test (expected=CreacionFechaException.class)
	public void crearFechaConStringIncorrecto() {
		/*Prueba la creación de una fecha, pero ingresando un String
		 *que no corresponde a ningún formato definido.*/
		new Fecha(estandar,"cualquierString");
		
		//TODO Germán - Incorrecta utilización del assert
		//Con el expected ya determinamos lo que debe retornar el test.
	}
	
	@Test (expected=CreacionFechaException.class)
	public void crearFechaConStringInvalidoYFormatoFlexible() {
		/*Prueba la creación de una fecha Flexible, pero sin tener éxito
		 * dado que no encuentra un formato adecuado.*/
		new Fecha(losTresFormatos,"stringInvalido");
		
		//TODO Germán - Incorrecta utilización del assert
		//Idem anterior.
	}
	
	@Test 
	public void probarQueUnaFechaEsAnteriorAOtra() {
		/*Pruebo que una fecha sea mayor a otra y que tome dos formatos 
		 * diferentes.*/
		Fecha fechaMayor = new Fecha(estandar,"2012-05-15");
		Fecha fechaMenor = new Fecha(latinoamericano,"10/05/2012");
		Assert.assertTrue(fechaMenor.esAnteriorA(fechaMayor));
		
	}
	
	@Test
	public void probarDiferenciaEntreFechas() {
		//Prueba que la diferencia entre dias es incorrecta
		Fecha fechaA = new Fecha(latinoamericano, "10/05/2012");
		Fecha fechaB = new Fecha(norteamericano, "05/10/2012");
		Assert.assertFalse(fechaA.diferenciaDiasConLaFecha(fechaB)==1);
	}
	
	@Test
	public void probarQueUnaFechaNOEsAnteriorAOtroObjetoFechaCuandoSonIguales()
	{
		//Prueba que la funcion esAnteriorA(Fecha) con dos objetos Fecha que tienen cargada la misma fecha retorna FALSO
		Fecha fechaA = new Fecha(latinoamericano, "10/05/2012");
		Fecha fechaB = new Fecha(norteamericano, "05/10/2012");
		Assert.assertFalse(fechaA.esAnteriorA(fechaB));
		
	}
	
	@Test
	public void creaCorrectamenteFechaConStringValidoYFormatoFlexible() {
		//TODO Germán - Está variable nunca la utilizan
		//Eliminada
		//TODO Germán - No tiene sentido tener un test con un assert hardcodeado a true o false
		//Eliminado
		
		//TODO Germán - Acá les puse un ejemplo del uso correcto del assert - Codifiquen lo necesario para que funcione
		Fecha fechaBienEscrita = new Fecha(losTresFormatos, "10/05/2012");
		Assert.assertEquals(fechaBienEscrita.getDia(),10);
		Assert.assertEquals(fechaBienEscrita.getMes(),5);
		Assert.assertEquals(fechaBienEscrita.getAnio(),2012);
	}
	
	@Test (expected=CreacionFechaException.class)
	public void creacionFechaConStringValidoYFormatoIncorrecto() {
		//TODO Germán - No utilizan la variable
//		Fecha fechaConFormatoIncorrecto = new Fecha(estandar, "26/03/2012");
		
		//TODO Germán - Incorrecta utilización del assert
//		Assert.assertTrue(false);
		
		//TODO Germán - El test solo debería ser
		new Fecha(estandar, "26/03/2012");
	}
	
}
